package com.yyh2;
/*- 模拟接待员接待用户，根据用户id，给用户分组。
- 定义用户类：
  - 属性：用户类型，用户id
  - 提供基本的构造方法和get方法，set方法
- 定义接口Filter：
  - 提供抽象方法filterUser（User u）
- 定义实现类V1Filter，实现抽象方法，将用户设置为v1
- 定义实现类V2Filter，实现抽象方法，将用户设置为v2
- 定义实现类AFilter，实现抽象方法，将用户设置为A
- 定义接待员类Receptionist：
  - 属性：接口Filter
  - 提供基本的构造方法和get方法，set方法
  - 成员方法：接待用户方法，设置用户类型。
- 测试类：
  - 初始化15个User对象，id为1-15。
  - 创建三个接待员对象。
    - 第一个接待员，设置接待规则，将1-5号用户类型设置为v1。
    - 第二个接待员，设置接待规则，将6-10号用户类型设置为v2。
    - 第三个接待员，设置接待规则，将11-15号用户类型设置为A。
  - 遍历数组，分别用三个接待员对象，给用户分区
  改用匿名内部类实现接口，来代替V1Filter、V2Filter、AFilter
*/
public class Demo3 {
    public static void main(String[] args) {
        //定义用户数组
        User[] users = new User[15];
        //初始化用户数组
        for(int i = 0;i < users.length;i++){
            users[i] = new User();
            users[i].setId(i+1);
        }
        // 创建三个接待员对象，使用匿名内部类实现 Filter
        Receptionist r1 = new Receptionist(new Filter() {
            @Override
            public void filterUser(User u) {
                if (u.getId() >= 1 && u.getId() <= 5) {
                    u.setType("v1");
                }
            }
        });

        Receptionist r2 = new Receptionist(new Filter() {
            @Override
            public void filterUser(User u) {
                if (u.getId() >= 6 && u.getId() <= 10) {
                    u.setType("v2");
                }
            }
        });

        Receptionist r3 = new Receptionist(new Filter() {
            @Override
            public void filterUser(User u) {
                if (u.getId() >= 11 && u.getId() <= 15) {
                    u.setType("A");
                }
            }
        });

        // 遍历数组，分别用三个接待员对象，给用户分区
        for (User user : users) {
            r1.reception(user);
            r2.reception(user);
            r3.reception(user);
            System.out.println(user.getInfo());
        }
    }
}
//定义用户类
class User{
    //属性
    //用户类型
    private String type;
    //用户id
    private int id;
    //构造方法
    public User(){
        super();
    }
    public User(String type,int id){
        this.type = type;
        this.id = id;
    }
    //get方法，set方法
    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
    // 新增 getInfo() 方法，用于输出用户信息
    public String getInfo() {
        return "用户ID: " + id + ", 类型: " + type;
    }
}
//定义接口Filter
interface Filter{
    //抽象方法
    public void filterUser(User u);
}
//定义实现类V1Filter
class V1Filter implements Filter{
    @Override
    public void filterUser(User u) {
        u.setType("v1");
    }
}
//定义实现类V2Filter
class V2Filter implements Filter{
    @Override
    public void filterUser(User u) {
        u.setType("v2");
    }
}
//定义实现类AFilter
class AFilter implements Filter{
    @Override
    public void filterUser(User u) {
        u.setType("A");
    }
}
//定义接待员类Receptionist
class Receptionist{
    //属性
    private Filter filter;
    //构造方法
    public Receptionist(){
        super();
    }
    public Receptionist(Filter filter){
        this.filter = filter;
    }
    //成员方法
    public void reception(User user){
        filter.filterUser(user);
    }
    //get方法，set方法
    public void setFilter(Filter filter) {
        this.filter = filter;
    }
    public Filter getFilter() {
        return filter;
    }
}
